﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Formation_Entreprise
{
    public partial class frmLogin : Form
    {
        // Importation de la DLL necessaire a la création d'un formulaire
        // avec les coins arrondits, création de la méthode externe CreateRoundRectRgn
        // avec les propriétées demandées par celle-ci.

        [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
        private static extern IntPtr CreateRoundRectRgn
        (
            int nLeftRect, // coordonné X du côté en haute à gauche
            int nTopRect, // coordonné Y du côté en haute à gauche
            int nRightRect, // coordonné X du côté en bas à droite
            int nBottomRect, // coordonné Y du côté en bas à droite
            int nWidthEllipse, // hauteur de l'ellipse
            int nHeightEllipse // largeur de l'ellipse
        );

        public frmLogin()
        {
            InitializeComponent();

            //***********************************************//
            // Gestion de base de l'apparence du formulaire  
            // (frmLogin) et de ces contrôles divers.        
            //***********************************************//

            // Utilisation de la methode CreateRoundRectRgn afin d'arrondir les coins du formulaire
            Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(20, 20, Width - 20, Height - 50, 20, 20));

            // Initialisation du formulaire
            this.ControlBox = false;
            this.Text = string.Empty;
            this.StartPosition = FormStartPosition.CenterScreen;

            this.BackColor = Color.White;
            this.btnLogin.BackColor = Color.FromArgb(106, 201, 47);

            this.txtUsername.TabIndex = 0;
            this.txtPassword.TabIndex = 1;
            this.btnLogin.TabIndex = 2;

            this.AcceptButton = btnLogin;

            // Initialisation du label lblErreurLogin
            this.lblErreurLogin.Text = "Login invalide. Veuillez essayer à nouveau.";
            this.lblErreurLogin.ForeColor = Color.Red;
            this.lblErreurLogin.Visible = false;
            
            // Ajout de l'image dans le picture box (picLogin)
            this.picLogin.SizeMode = PictureBoxSizeMode.StretchImage;
            picLogin.Image = new Bitmap("../../image/login.png");

            // Ajustement du caractère spéciale pour le mot de passe
            this.txtPassword.PasswordChar = '•';
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // Obtenir le nom d'usager et le motpasse et
            // on les stocks dans des variables
            string usager = this.txtUsername.Text;
            string motpasse = this.txtPassword.Text;

            // Test des champs du formulaire afin qu'il 
            // n'y en ai pas de vide & gestion des champs vides
            if (usager.Length < 4 || usager.Length > 12)
            {
                // Le champ Username est vide alors on envoie un message et on donne
                // le focus à txtUsername afin que le client entre une donnée valide.
                MessageBox.Show("La case Nom d'usager ne peut être vide et doit comprendre de 4 à 12 " +
                    "caractères, veuillez noter que celle-ci est sensible à la case.");
                txtUsername.Select(0, txtUsername.TextLength);
                txtUsername.Focus();
                return;
            }
            else if (motpasse.Length < 4)
            {
                // Le champ Password est vide alors on envoie un message et on donne
                // le focus à txtUsername afin que le client entre une donnée valide.
                MessageBox.Show("La case Mot de Passe ne peut être vide et doit comprendre minimalement " +
                    "4 caractères, veuillez noter que celle-ci est sensible à la case.");
                txtPassword.Select(0, txtPassword.TextLength);
                txtPassword.Focus();
                return;
            }

            // Validation du login
            bool loginSuccessful = AccesTableUsager.CheckLogin(usager, motpasse);

            if (loginSuccessful)
            {
                // L'authetification est complete alors on procède 
                // a differente manipulations:

                // Appel de la fonction pour afficher le menu du formulaire principal
                frmMain formMain = (frmMain)this.MdiParent;
                formMain.ToggleMenuMain(true, AccesTableUsager.VerifierUsagerAdmin(usager));

                this.Close();
            }
            else
            {
                // Affichage du label avec le message d'erreur approprié 
                // pour une erreur de login comise par le client
                this.lblErreurLogin.Show();
            }            
        }
    }
}
